package com.fxc.crowd.util;

import com.fxc.crowd.constant.CrowdConstant;

import javax.servlet.http.HttpServletRequest;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 项目通用的方法类
 * @author FDL
 */
public class CrowdUtil {

    /**
     * 对明文字符串进行md5加密
     * @param source 传入的明文字符串
     * @return 加密的结果
     */
    public static String md5(String source){

        // 1.判断resource是否有效
        if (source == null || source.length() == 0){
            // 2.如果不是有效的字符串抛出异常
            throw new RuntimeException(CrowdConstant.MESSAGE_STRING_INVALIDATE);
        }


        try {
            // 3.获取MessageDigest对象
            String algorithm = "md5";
            MessageDigest messageDigest = MessageDigest.getInstance(algorithm);

            // 4.获取明文字符串对应的字节数组
            byte[] input = source.getBytes();

            // 5.执行加密
            byte[] output = messageDigest.digest(input);

            // 6.创建BigInteger对象
            int sigNum = 1;
            BigInteger bigInteger = new BigInteger(sigNum, output);

            // 7.按照16进制bigInteger的值转换为字符串
            int radix = 16;
            String encoded = bigInteger.toString(radix).toUpperCase()   ;

            return encoded;

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }


        return null;
    }

    /**
     * 判断当前请求是否为AJAX请求
     * @param request
     * @return
     */
    public static boolean judegeRequestType(HttpServletRequest request){
        //1.获取请求消息请求头
        String accept = request.getHeader("Accept");
        String header = request.getHeader("X-Requested-With");

        //2.判断
        return (
                (accept != null && accept.equals("application/json"))
                ||
                (header != null && header.equals("XMLHttpRequest"))
        );
    }
}
